atspi: Set some more atspi states
authorMatthias Clasen <mclasen@redhat.com>
Mon, 12 Oct 2020 04:21:14 +0000 (00:21 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 12 Oct 2020 19:10:40 +0000 (15:10 -0400)
Pass on more of the states that are represented
as properties in aria: modal, multi-line, orientation.

gtk/a11y/gtkatspicontext.c

index f9593474a2c65eaf0f03e19c9b8854410c48e89c..19583a96263e495d4ed3c2207cab155fa0593a46 100644 (file)
@@ -115,6 +115,29 @@ collect_states (GtkAtSpiContext    *self,
         }
     }
 
+  if (gtk_at_context_has_accessible_property (ctx, GTK_ACCESSIBLE_PROPERTY_ORIENTATION))
+    {
+      value = gtk_at_context_get_accessible_property (ctx, GTK_ACCESSIBLE_PROPERTY_ORIENTATION);
+      if (gtk_orientation_accessible_value_get (value) == GTK_ORIENTATION_HORIZONTAL)
+        state |= (G_GUINT64_CONSTANT (1) << ATSPI_STATE_HORIZONTAL);
+      else
+        state |= (G_GUINT64_CONSTANT (1) << ATSPI_STATE_VERTICAL);
+    }
+
+  if (gtk_at_context_has_accessible_property (ctx, GTK_ACCESSIBLE_PROPERTY_MODAL))
+    {
+      value = gtk_at_context_get_accessible_property (ctx, GTK_ACCESSIBLE_PROPERTY_MODAL);
+      if (gtk_boolean_accessible_value_get (value))
+        state |= (G_GUINT64_CONSTANT (1) << ATSPI_STATE_MODAL);
+    }
+
+  if (gtk_at_context_has_accessible_property (ctx, GTK_ACCESSIBLE_PROPERTY_MULTI_LINE))
+    {
+      value = gtk_at_context_get_accessible_property (ctx, GTK_ACCESSIBLE_PROPERTY_MULTI_LINE);
+      if (gtk_boolean_accessible_value_get (value))
+        state |= (G_GUINT64_CONSTANT (1) << ATSPI_STATE_MULTI_LINE);
+    }
+
   if (gtk_at_context_has_accessible_state (ctx, GTK_ACCESSIBLE_STATE_BUSY))
     {
       value = gtk_at_context_get_accessible_state (ctx, GTK_ACCESSIBLE_STATE_BUSY);
@@ -720,6 +743,33 @@ gtk_at_spi_context_state_change (GtkATContext                *ctx,
       if (ctx->accessible_role == GTK_ACCESSIBLE_ROLE_TEXT_BOX)
         emit_state_changed (self, "editable", !readonly);
     }
+
+  if (changed_properties & GTK_ACCESSIBLE_PROPERTY_CHANGE_ORIENTATION)
+    {
+      value = gtk_accessible_attribute_set_get_value (properties, GTK_ACCESSIBLE_PROPERTY_ORIENTATION);
+      if (gtk_orientation_accessible_value_get (value) == GTK_ORIENTATION_HORIZONTAL)
+        {
+          emit_state_changed (self, "horizontal", TRUE);
+          emit_state_changed (self, "vertical", FALSE);
+        }
+      else
+        {
+          emit_state_changed (self, "horizontal", FALSE);
+          emit_state_changed (self, "vertical", TRUE);
+        }
+    }
+
+  if (changed_properties & GTK_ACCESSIBLE_PROPERTY_CHANGE_MODAL)
+    {
+      value = gtk_accessible_attribute_set_get_value (properties, GTK_ACCESSIBLE_PROPERTY_MODAL);
+      emit_state_changed (self, "modal", gtk_boolean_accessible_value_get (value));
+    }
+
+  if (changed_properties & GTK_ACCESSIBLE_PROPERTY_CHANGE_MULTI_LINE)
+    {
+      value = gtk_accessible_attribute_set_get_value (properties, GTK_ACCESSIBLE_PROPERTY_MULTI_LINE);
+      emit_state_changed (self, "multi-line", gtk_boolean_accessible_value_get (value));
+    }
 }
 
 static void